/*
 * @Description  : 
 * @Version      : 1.0
 * @Author       : seraph
 * @Date         : 2024-12-12 11:35:03
 * @LastEditors  : seraph
 * @LastEditTime : 2025-02-14 18:41:48
 */
/*
 * @Description  : Vite 配置文件
 * @Version      : 1.0
 * @Author       : seraph
 * @Date         : 2024-12-12 11:35:03
 * @LastEditors  : seraph
 * @LastEditTime : 2025-02-14 18:40:44
 */
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import vueDevTools from 'vite-plugin-vue-devtools'
import autoprefixer from 'autoprefixer' // 确保这行代码存在

// Vite 配置导出
export default defineConfig({
  // 插件配置
  plugins: [
    vue(), // Vue 单文件组件支持
    vueJsx(), // Vue JSX 支持
    vueDevTools(), // Vue 开发工具
  ],
  css: {
    postcss: {
      plugins: [
        // 自动添加浏览器前缀
        autoprefixer(), // 确保这行代码存在
      ],
    },
  },

  // 路径别名配置
  resolve: {
    alias: {
      // 配置 @ 作为 src 目录的别名
      '@': fileURLToPath(new URL('./src', import.meta.url)),
      vue: 'vue/dist/vue.esm-bundler.js',
    },
  },

  // 项目根目录，默认为当前工作目录
  root: process.cwd(),
  // 构建输出目录，默认为 dist
  build: {
    outDir: 'dist', // 输出目录
    assetsDir: 'assets', // 静态资源目录
    emptyOutDir: true, // 构建前先清空输出目录
    minify: 'terser', // 压缩混淆代码
    sourcemap: false, // 不生成 sourcemap
    rollupOptions: {
      // 确保外部化处理的依赖项打包进 vendor.js 文件
      output: {
        entryFileNames: 'assets/[name].[hash].js',
        chunkFileNames: 'assets/[name].[hash].js',
        assetFileNames: 'assets/[name].[hash][extname]',
      },
    },
  },

  // 开发环境配置
  mode: 'development',

  // 开发环境服务器配置
  base: '/',
  // 开发服务器配置
  server: {
    // 监听所有可用网络接口
    host: '0.0.0.0',

    // 开发服务器端口
    port: 8181,

    // 自动打开浏览器
    open: true,

    // 接口代理配置
    proxy: {
      // 代理 /api 开头的请求
      '/api': {
        target: 'http://localhost', // 目标服务器地址
        changeOrigin: true, // 允许跨域
        rewrite: (path) => path.replace(/^\/api/, ''), // 重写路径
      },
    },

    // 严格端口模式
    strictPort: true,

    // 热更新配置
    hmr: {
      overlay: true, // 显示错误遮罩
    },

    // 允许跨域
    cors: true,
  },
})